using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using Packtracker.Business;

namespace Packtracker.UserControls
{
	public partial class PedidoEditar : UserControl
	{
		protected void Page_Load(object sender, EventArgs e)
		{
			if (!IsPostBack)
			{
				pedidoForm.DefaultMode = getPedido().IsNew ? FormViewMode.Edit : FormViewMode.ReadOnly;
				ApplyAuthorizationRules();
			}
		}

		#region Metodos privados

		private void ApplyAuthorizationRules()
		{
			//pedidoButton.Visible = Packtracker.Business.Pedido.CanAddObject();
		}

		private void setPedido(Pedido pedido, bool salvar)
		{
			if (salvar)
			{
				pedido = pedido.Save();
				ViewState["Pedido"] = Pedido.GetPedido(pedido.Id);
			}
			else
			{
				ViewState["Pedido"] = pedido;
			}
		}

		protected Pedido getPedido()
		{
			int pedidoId = 0;
			Pedido pedido = ViewState["Pedido"] as Pedido;

			if (pedido == null)
			{
				if (!String.IsNullOrEmpty(Request.QueryString["PedidoId"]))
					int.TryParse(Request.QueryString["PedidoId"].ToString(), out pedidoId);

				pedido = (pedidoId == 0) ? Pedido.NewPedido() : Pedido.GetPedido(pedidoId);
				ViewState.Add("Pedido", pedido);
			}
			return pedido;
		}

		#endregion

		#region ItemPedidoGrid

		protected void itemPedidoAdicionar_Click(object sender, EventArgs e)
		{
			Response.Redirect("ItemPedidoEditar.aspx?itemPedidoId=0");
			
			/* 
			 * Edicao na linha do GridView
			GridView childGrid = (GridView)pedidoForm.FindControl("itemPedidoGrid");
			Pedido pedido = getPedido();

			if (childGrid.Rows.Count == 0 || pedido.ItensPedido[childGrid.Rows.Count - 1].IsValid)
			{
				pedido.ItensPedido.AddNew();
				setPedido(pedido, false);
			}

            childGrid.PageIndex = childGrid.PageCount - 1;
			childGrid.DataBind();
            childGrid.EditIndex = childGrid.Rows.Count - 1;
            */
		}
		
	    //Mtodos para edio de dados na linha do GridView
		protected void itemPedidoGrid_SelectedIndexChanged(object sender, EventArgs e)
		{
			Response.Redirect("ItemPedidoEditar.aspx" +
				"?ItemPedidoid=" + Server.UrlEncode(((GridView)pedidoForm.FindControl("itemPedidoGrid")).SelectedDataKey["id"].ToString()));
		}
        /*
		protected void itemPedidoGrid_RowDeleting(object sender, GridViewDeleteEventArgs e)
		{
			Pedido pedido = getPedido();
			pedido.ItensPedido.RemoveAt(e.RowIndex);
			setPedido(pedido, false);
		}

		protected void itemPedidoGrid_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
		{
			Pedido pedido = getPedido();
			if(!pedido.ItensPedido[e.RowIndex].IsValid)
			{
				pedido.ItensPedido.RemoveAt(e.RowIndex);
			}
			setPedido(pedido, false);
		}

		protected void itemPedidoGrid_RowUpdating(object sender, GridViewUpdateEventArgs e)
		{
			Pedido pedido = getPedido();
			int key = (int)e.Keys["Id"];
			foreach (ItemPedido itemPedido in pedido.ItensPedido)
			{
				if (itemPedido.Id == key)
				{
					Csla.Data.DataMapper.Map(e.NewValues, itemPedido, "Id");
					itemPedido.PedidoId = key;
					itemPedido.idProdutoDescricao = ((DropDownList)pedidoForm.FindControl("idProdutoDropDownList")).SelectedItem.Text;
					break;
				}
			}
			setPedido(pedido, false);
		}
		*/
		#endregion

		#region PedidoForm

		protected void pedidoForm_ItemUpdated(object sender, FormViewUpdatedEventArgs e)
		{
			Pedido pedido = getPedido();
			Csla.Data.DataMapper.Map(e.NewValues, pedido, "Id");
			setPedido(pedido, true);
			
			pedidoForm.DefaultMode = FormViewMode.ReadOnly;
            pedidoForm.DataBind();
		}
		
        protected void pedidoForm_ItemCommand(object sender, FormViewCommandEventArgs e)
        {
            switch (e.CommandName)
            {
                case "Cancel":
                    pedidoForm.DefaultMode = FormViewMode.ReadOnly;
                    pedidoForm.DataBind();
                    break;
                case "Edit":
                    pedidoForm.DefaultMode = FormViewMode.Edit;
                    ApplyAuthorizationRules();
                    break;
            }
        }
        
        protected void pedidoForm_ItemDeleting(object sender, FormViewDeleteEventArgs e)
        {
            Pedido.DeletePedido(getPedido().Id);
        }
		
		#endregion
		
		#region DataSources

		protected void pedidoDataSource_SelectObject(object sender, Csla.Web.SelectObjectArgs e)
		{
			e.BusinessObject = getPedido();
		}

		protected void itemPedidoListDataSource_SelectObject(object sender, Csla.Web.SelectObjectArgs e)
		{
			e.BusinessObject = getPedido().ItensPedido;
		}

		protected void idProdutoListDataSource_SelectObject(object sender, Csla.Web.SelectObjectArgs e)
		{
			e.BusinessObject = ProdutoCollection.GetProdutoCollection();
		}

		protected void idDestinoListDataSource_SelectObject(object sender, Csla.Web.SelectObjectArgs e)
		{
			e.BusinessObject = EnderecoCollection.GetEnderecoCollection();
		}

		protected void idOrigemListDataSource_SelectObject(object sender, Csla.Web.SelectObjectArgs e)
		{
			e.BusinessObject = EnderecoCollection.GetEnderecoCollection();
		}

		#endregion
		
    }
}
